// https://leetcode.cn/problems/longest-palindromic-substring/description/

function longestPalindrome(s: string): string {
    // 获取长度
    const n = s.length;
    // 边界限制
    if(n <= 1) return s;
    // 定义开始和结束的值，循环中用于存储最长的回文子串的长度
    let start = 0;
    let end = 0;
    for(let i = 0; i < n; i++) {
        // 这里有两种情况 aba abba 都属于会文字串，所以拿到两个长度得到较大的一个
        const length1 = centerExpand(s,i,i);
        const length2 = centerExpand(s,i,i + 1);
        const len = Math.max(length1,length2);
        // 如果得到的当前最大长度大于之前的最大长度，更新最大长度
        if(len > end - start) {
             // 新的最大长度的开始索引和结束索引，这里到时候自己写个字符串去举例看一下
             start = i - Math.floor(( len- 1)/2)
             end = Math.floor(i + len/2)
        }
    }

    // 根据最终的索引区字符串中截取值，substring是左闭右开，所以end + 1
    return s.substring(start, end + 1);;
};

// 从中心向两边遍历,双指针，当两边值一样的时候，一直循环，最终将长度返回出去
function centerExpand(s: string, left:number , right:number): number {
    // 边界限制和判断值是否相等
    while (left >= 0 && right <= s.length - 1 && s[left] == s[right]){
        left --;
        right ++;
    }
    // 跳出循环时，两者都会向两边多加和多减了一次，所以最终长度要减一
    return right - left - 1;
}

console.log(longestPalindrome("babad"))


export default {};